@Lemon
2年前 提问
1个回答

SQL Server的三大安全机制是什么

趣能一姐
2年前

SQL Server的三大安全机制如下:

  • 服务器级别的安全机制:服务器级别所包含的安全性对象主要有用户登录名、固定服务器角色等。其中,登录名用于登录数据库服务器,而固定服务器角色用于给登录名赋予相应的服务器访问权限。该级别的安全性主要通过登录名进行控制,要想访问一个数据库服务器,必须拥有一个合法的登录名。登录名可以是Windows账户,也可以是SQL Server的账户。

  • 数据库级别的安全机制:数据库级别所包含的安全对象主要有用户、角色、应用程序角色、证书、对称秘钥、非对称密钥、程序集、全文目录、DDL事件和架构等。该级别的安全性主要通过用户账号进行控制,要想访问一个数据库,必须拥有该数据库授权的合法用户身份账号。用户账号可以是通过操作系统登录账号进行映射的,也可以是属于固定的数据库角色或自定义数据库角色的。

  • 数据对象级别的安全机制:也称为架构级别安全机制。架构级别所包含的安全对象主要有表、视图、函数、存储过程、类型、同义词和聚合函数等。架构的作用是将数据库中的所有对象分成不同的集合,每一个集合就称为一个架构,每个集合之间都没有交集。该级别的安全性通过设置数据对象的访问权限进行控制。

通过Web应用防御SQL注入的手段有以下这些:

  • 添加数据记录:如果Web应用程序需要从表单中获取相关数据,然后往后台数据库的相关数据表中插入一条新的记录,程序员可以不直接使用INSERT语句,而通过先打开记录集对象,然后往记录集对象中先添加一条空记录,再将具体的数据内容写入到记录字段中,最后直接将记录集更新到数据库中。这样就可以有效避免SQL攻击,达到防御的目的。

  • 修改数据:如果Web应用程序需要从表单中获取相关数据,然后修改后台数据库的相关数据表中的数据记录,程序员也可以不直接使用UPDATE语句,而通过先构造一条查询语句,打开记录集对象,然后找到要修改的数据记录,再将具体的数据内容写入到记录字段中,最后将修改后的记录集更新到数据库中,这样就可以有效避免SQL攻击,达到防御的目的。

  • 删除数据:如果Web应用程序需要删除数据记录,程序员也可以不直接使用DELETE语句,而通过先构造一条查询语句,打开记录集对象,然后找到要删除的数据记录,将此记录删除,再将删除记录后的记录集更新到数据库中。删除操作是使用rs.delete语句完成的。这样就可以有效避免SQL攻击,达到防御的目的。

  • 利用视图修改和删除:操作视图与操作表有许多功能是相同的,例如查询数据。如果一个视图是多表关联生成的,它比直接运行多表关联速度要快,因为视图是提前编译好的,SQL语句的执行首先需要编译。与表格不同,视图的插入、修改和删除是有限制的,这种限制可以在一定程度上保护数据被插入、修改或删除。

  • 利用存储过程进行数据的修改和删除:利用服务器端脚本修改数据的时候,可以利用记录集对象的一些属性,例如记录数(rs.recordcount)来判断影响的行数,如果不为0可以进行修改或删除。另外也可以利用SQL语句通过存储过程对修改或删除操作进行重新封装,并利用SQL语句对参数或影响的行数进行判断,在存储过程中也可以同时对参数进行过滤等处理。